package cn.edu.flying_birds;

import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * @PackageName: cn.edu.flying_birds
 * @ClassName: Bird
 * @Description: 小鸟类
 * @author: RZS
 * @date: 2021/6/25  18:06
 */
public class Bird {
    // 定义小鸟的X, Y 坐标
    public int x;
    public int y;
    // 定义小鸟的宽度和高度
    public int width;
    public int height;
    // 定义小鸟的图片
    public BufferedImage img;
    // 定义小鸟图片组
    public BufferedImage[] imgs = new BufferedImage[8];
    // 初始速度
    private double v0;
    // 上飞的时间
    private double t;
    // 每次上飞的距离
    private double s;
    // 加速度
    private double g;

    public Bird() {
        try {
            init();
        } catch (IOException e) {
            System.out.println("初始化小鸟失败");
            e.printStackTrace();
        }
    }

    /**
     * 初始化小鸟属性
     */
    private void init() throws IOException {
        img = ImgUtils.getImg("../img/0.png");
        width = img.getWidth()/2;
        height = img.getHeight()/2;
        x = 120;
        y = 200;
        // 初始化图片组 num.for
        for (int i = 0; i < imgs.length; i++) {
            imgs[i] = ImgUtils.getImg("../img/"+i+".png");
        }
        v0 = 3;
        s = 2;
        t = 0.2;
        g = 9.7;
    }

    /**
     * 判断小鸟是否与柱子相撞
     * @param column 柱子对象
     * @return
     */
    public boolean columnCrash(Column column){
        // 判断小鸟是否与柱子的左侧相撞
        boolean left = (x + width < column.x);
        // 判断小鸟是否与柱子右侧相撞
        boolean right = (column.x + column.width < x);
        // 判断小鸟是否与柱子空隙上边缘相撞
        boolean up = (y > (column.height/2 - column.gap/2 + column.y));
        // 判断小鸟是否与柱子空隙下边缘相撞
        boolean down = ((y+height) < (column.height/2 - column.gap/2 + column.y + column.gap));

        if(left || right || (up && down)){
            // 没有撞到柱子
            return false;
        }
        // 撞到柱子了
        return true;
    }

    /**
     * 判断小鸟是否与地面碰撞
     * @return
     */
    public boolean groundCrash(){
        if(y+height >= new Ground().y){
            // 与地面相撞
            return true;
        }
        // 没有撞到
        return false;
    }

    /**
     * 小鸟往上飞
     */
    public void moveUp(){
        v0 = 20;
    }

    /**
     * 小鸟下落
     */
    public void moveDown(){
        // 计算小鸟上飞的距离
        s = v0 * t;
        // 计算小鸟到达最高点的Y坐标
        y = (int)(y - s);
        // 计算小鸟到达最高点的速度
        // 此时将最高点的速度作为下落的初速度
        v0 = v0 - g * t;
    }

    /**
     * 让小鸟的翅膀煽动
     */
    int number = 0;
    public void flying(){
        // 判断number是否大于imgs.length
        if(number >= imgs.length){
            number = 0;
        }
        img = imgs[number];
        number ++;
    }

}
